/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio.admnistrador;

import datos.*;
import interfaz.Dibujo;
import interfaz.expedienteFrame;
import java.io.Serializable;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import negocio.cargador.cargador;
import negocio.contenedor.lista_cliente;
import negocio.contenedor.lista_encargado;
import negocio.contenedor.lista_expediente;
import negocio.contenedor.lista_historia_medica;
import negocio.contenedor.lista_tratamiento;

/**
 *
 * @author David
 */
public class administrador implements Serializable{
    
    private lista_cliente listacliente = new lista_cliente();
    private lista_encargado listaencargado = new lista_encargado();
    private lista_expediente listaexpediente = new lista_expediente();
    private lista_historia_medica listamedica = new lista_historia_medica();
    private lista_tratamiento listaTratamiento = new lista_tratamiento();
    private cargador cargador = new cargador();
    
    /********************************************CLIENTE*****************************************************/
    
    public lista_cliente getListacliente() {
        return listacliente;
    }

    public void setListacliente(lista_cliente listacliente) {
        this.listacliente = listacliente;
    }

    public lista_encargado getListaencargado() {
        return listaencargado;
    }

    public void setListaencargado(lista_encargado listaencargado) {
        this.listaencargado = listaencargado;
    }

    public lista_expediente getListaexpediente() {
        return listaexpediente;
    }

    public void setListaexpediente(lista_expediente listaexpediente) {
        this.listaexpediente = listaexpediente;
    }

    public lista_historia_medica getListamedica() {
        return listamedica;
    }

    public void setListamedica(lista_historia_medica listamedica) {
        this.listamedica = listamedica;
    }

    public lista_tratamiento getListaTratamiento() {
        return listaTratamiento;
    }

    public void setListaTratamiento(lista_tratamiento listaTratamiento) {
        this.listaTratamiento = listaTratamiento;
    }
    
    
        
    
    /**
     * Este metodo agregar un cliente a la lista de clientes y a la base de datos.
     */
    public boolean agregarCliente(cliente c){
        //Si la variable del cliente no esta vacia.
        if(c != null){
            listacliente.agregar_cliente(c);
            listaencargado.agregar_encargado(c.getEncargado());
            //se insertan todo lo requerido a la base de datos.
            
            //se inserta el cliente y el encargado en caso que haya en la base de datos.
            if(c.getEncargado() != null){
                cargador.insertar_encargado_db(c.getEncargado(), c.getId_cliente_cedula());
            }    
            if(c.isExpress()){
                return cargador.instertar_cliente_express_db(c);
            }else{
                return cargador.instertar_cliente_db(c);                 
            }
            
        }else{
            return false;
        }
    }
    
    /**
     * Este metodo modifica un cliente en la base de datos.
     */
    public boolean modificar_cliente(cliente cliente) {        
        //El cliente tiene encargado?
        if(cliente.getEncargado() != null){
            cargador.modificar_encargado_db(cliente.getId_cliente_cedula(), cliente.getEncargado());
        }
        return cargador.modificar_cliente_db(cliente.getId_cliente_cedula(), cliente);        
    }
    
    /**
     * Este metodo elimina un cliente de la base de datos.
     */
    public boolean eliminar_cliente(int id_cedula_cliente) {
        return cargador.eliminar_cliente_db(id_cedula_cliente);
    }
    
    /**
     * Este metodo busca a un cliente en la lista.
     */
    public cliente buscarCliente(int id) {
        return listacliente.buscarCliente(id);
    }
    
    public void cargar_lista_cliente(){
        listacliente.limpiar();
        cargador.cargar_lista_cliente(listacliente);
    }//en of cargar_lista_cliente            
    
    public void actualizar_lista_cliente(JList list){
        cargador.actualizar_lista_cliente(list, listacliente);
    }
    /**
     * Busca un cliente relativo a el texto ingresado por el usuario.
     */
    public void buscarClientesLista(String text, JList list) {
        cargador.buscarClientesListaDBt(text, list, listacliente);
    }

    /********************************************ENCARGADO*****************************************************/
    
    
    
    /********************************************EXPEDIENTE*****************************************************/
    
        
    
    /********************************************HISTORIA MEDICA*****************************************************/
    
    /**
     * El metodo agrega una historia medica.
     */
    public boolean agregar_historia_medica(historia_medica historia_medica) {
        //Historia medica no esta vacia
        if(historia_medica != null){
             listamedica.agregar_hm(historia_medica);
             return cargador.insertar_historia_medica(historia_medica);
        }else{
            return false;
        }
    }
    
    public boolean modificar_historia_medica(historia_medica hm) {
     if(hm != null){
         return cargador.modificar_historia_medica_db(hm);
     }
     return false;
    }
    
    public historia_medica buscar_historia_medica(int id) {
        return listamedica.buscar_historia_medica(id);
    }
    
    public void cargar_lista_hm() {
        cargador.cargar_lista_cliente(listamedica, listacliente);
    }
    
    /********************************************TRATAMIENTO*****************************************************/  
    
    public void agregarTratamiento(tratamiento t) {
        cargador.agregar_tratamiento_db(t);
        cargar_lista_tratamiento();
    }

    public void cargar_lista_tratamiento() {
        listaTratamiento.limpiar();
        cargador.cargar_lista_tratamineto_db(listaTratamiento, listacliente);        
    }
    
    public tratamiento buscarTratamiento(int id) {
        for(int i = 0; i < listaTratamiento.getLista().size(); i++){
            if(listaTratamiento.getLista().get(i).getNumero() == id){
                return listaTratamiento.getLista().get(i);
            }
        }
        return null;
    }
    
    public boolean modificar_tratamiento(tratamiento tratamiento) {
        if(tratamiento != null){
            boolean modificado =  cargador.modificar_tratamiento_db(tratamiento);
            if(modificado){
                cargar_lista_tratamiento();                
                return true;
            }else{
                return false;
            }
        }
        return false;
    }
    
    public void eliminar_tratamiento(int id_tratamiento) {
        cargador.eliminar_tratamiento_desactivar(id_tratamiento);
        cargar_lista_tratamiento();
    }
    
    /********************************************GENERICO*****************************************************/    
    public void conectar() {
        cargador.conectar();
    }
    
/********************************************ODOONTOGRAMA*****************************************************/    
    

   // public void creaOdontograma(String nombre,Diente diente){
    //    String nombreCliente = nombre;
   //     cargador.cargaOdontograma(nombre, dibujo);
        
   // }
 
    public void guardaOdontograma(int id,Diente diente, boolean b){
 
        if (b) {//Modificar Odontograma
            cargador.modificarOdontograma(id, diente);
            if (diente.isObjetoModificado()) {
                System.out.println("objeto modificado");
            } else {
                System.out.println("objeto NO modificado");
            }
        } else {//Guarda odontograma 
            diente.setObjetoModificado(true);
            if (diente.isObjetoModificado()) {
                System.out.println("objeto modificado");
            } else {
                System.out.println("objeto NO modificado");
            }

            cargador.guardaOdontograma(id, diente);
        }


    }
    
    public Diente cargarOdontograma(int id, Diente d) {
     Diente diente = cargador.cargaOdontograma(id, d);//diente.setObjetoModificado(true); if(diente.isObjetoModificado()){System.out.println("objeto modificado");}else{System.out.println("objeto NO modificado");}
     return diente;
    }

    public void cargaIDs(JComboBox o) {

        cargador.cargaID(o, listacliente);


    }


    public void modificaExamenes(expedienteFrame fr) {
        cargador.modificarExamen(fr);
    }

    public boolean existeID(int id_cliente_cedula) {
        return cargador.existe_cliente_id_db(id_cliente_cedula);        
    }


    
    public boolean guardarExamen(int id){
         
        if (listacliente.buscarCliente(id) != null ) {
            return false; 

        } else {
            cargador.guardarExamen(id);

        }

        return true;
    }

    
    public examen cargaExamen(int id) {


        return cargador.cargarExamen(id);
    }
    

    

    

    
    
    
    
}
